#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH	"/tmp/socket.domain"
#define MSG_STR		"Hello,Unix Domain Socket"

int main(int argc,char **argv)
{
	int			rv = -1;
	int			conn_fd;
	struct sockaddr_un	serv_addr;
	char			buf[1024];

	conn_fd = socket(AF_UNIX,SOCK_STREAM,0);
	if(conn_fd < 0)
	{
		printf("create socket failure: %s\n",strerror(errno));
		return -1;
	}

	printf("create socket success :fd[%d]\n",conn_fd);


	memset(&serv_addr,0,sizeof(serv_addr));
	serv_addr.sun_family=AF_UNIX;
	strncpy(serv_addr.sun_path,SOCKET_PATH,sizeof(serv_addr.sun_path)-1);


	if( connect(conn_fd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0 )
	{
		printf("Connect to unix domain server socket on \'%s\' failure: %s\n",SOCKET_PATH,strerror(errno));
		return 0;
	}

	printf("socket [%d] connect to unix domain sever on path \"%s\" ok\n",conn_fd,SOCKET_PATH);

	if(write(conn_fd,MSG_STR,strlen(MSG_STR)) < 0)
	{
		printf("Write data to unix domain socket on\'%s\' failure: %s\n",SOCKET_PATH,strerror(errno));
		goto Cleanup;
	}
	memset(buf,0,sizeof(buf));
	rv = read(conn_fd,buf,sizeof(buf));
	if(rv<0)
	{
		printf("Read data from server failure: %s\n",strerror(errno));
		goto Cleanup;
	}
	else if(0==rv)
	{
		printf("Client connect to server get disconnected\n");
		goto Cleanup;
	}

	printf("Read %d bytes data from server:'%s'\n",rv,buf);


Cleanup:
	close(conn_fd);
}	
